草庐IT

Android ArrayList迭代

全部标签

C++ 将 UTF-8 字符串迭代或拆分为符号数组?

正在寻找一种独立于平台和第3方库的方法来迭代UTF-8字符串或将其拆分为UTF-8符号数组。请发布代码片段。已解决:C++iterateorsplitUTF-8stringintoarrayofsymbols? 最佳答案 如果我没理解错的话,听起来您想找到每个UTF-8字符的开头。如果是这样,那么解析它们将相当简单(解释它们是另一回事)。但是RFC明确定义了涉及多少个八位字节。:Char.numberrange|UTF-8octetsequence(hexadecimal)|(binary)--------------------+

c++ - 使用 end() 迭代到 std::vector 的最后一个元素--

我有一个std::vector并且我希望iterator指向vector中的最后一个元素;我将存储此迭代器供以后使用。注意:我想要一个指向它的迭代器引用,而不是std::vector::back。因为我希望稍后能够从std::vector::begin计算此对象的索引。以下是我将迭代器获取到最后一个元素的逻辑:std::vectorcontainer;std::vector::iteratorit=container.end()--;由于std::vector::end具有O(1)时间复杂度,是否有更好的方法来做到这一点? 最佳答案

c++ - 为什么 std::sort 和 partial_sort 需要随机访问迭代器?

我想知道为什么c++标准要求std::sort应该只采用随机访问迭代器?我没有看到优势,因为std::sort和std::list::sort复杂度为N*log(N)。将std::sort限制为随机访问迭代器(RAI)似乎使得有必要为具有相同复杂性的列表编写单独的函数。这同样适用于partial_sort,其中列表的非RAI对应部分issimplymissing直到今天。这种设计是因为人们使用quick_sort的变体来实现std::sort吗?如果在RAI容器上编写排序算法有优势,是否最好使std::sort更通用,并让RAI容器像std::vector提供专门的v.sort?

c++ - 自制迭代器的常量正确性

总体目标我管理一个对象集合(CollectionofReal作为一个简单的例子)。然后我在我的集​​合上定义了迭代器。这意味着:iterator、const_iterator、reverse_iterator和const_reverse_iterator。在这个例子中,我只关注iterator和const_iterator,其他两个非常相似。之后,我想在我的集合上定义一个过滤器,它根据特定条件保留或不保留元素。例如,仅保留具有正值的Real实例。我还想只对保留的元素迭代我的集合。我是如何实现这个集合的对于这个例子,我在集合中的对象非常简单。目标只是拥有一个对象而不是原生类型:struc

c++ - 为什么 gcc 使用我的自定义迭代器优化掉这个 C++11 foreach 循环?

我正在尝试编写一些代码来创建序列的函数式样式。我写了一个函数,range(a,b),它返回一个你可以迭代的对象,foreach风格,遍历数字a,a+1,...,b-1.然后我写了另一个函数map(f,t),它返回另一个可迭代对象,其中序列中的每个元素都是用相应元素调用f的结果可迭代对象t.如果我使用-O1或更低版本进行编译,这将按预期工作;使用-O2或更高版本时,我的foreach循环(在底部的main中)得到完全优化并且没有打印任何内容。为什么会这样,我做错了什么?这是我的代码:templatestruct_range{Ta;Tb;_range(Ta,Tb):a(a),b(b){}s

c++ - 我将如何在 C++20 中传递范围而不是迭代器对?

我听说C++20将支持作用于范围,而不仅仅是开始+结束迭代器对。这是否意味着,在C++20中,我将能够编写:std::vectorvec=get_vector_from_somewhere();std::sort(vec);std::vectorhalves;halves.reserve(vec.size());std::transform(vec,std::back_inserter(halves),[](intx){returnx*0.5;});? 最佳答案 几乎,是的!您只需要使用std::ranges::命名空间而不仅仅是s

c++ - std::list 上的 splice() 和迭代器失效

list::splice()的三参数形式将单个元素从一个列表移动到另一个列表。SGI'sdocumentation明确声明所有迭代器,包括指向被移动元素的迭代器仍然有效。Roguewave'sdocumentation没有说明splice()方法的迭代器失效属性,而C++标准明确指出它会使所有迭代器和对被拼接元素的引用失效。splicing()在实践中按照SGI的定义工作,但我在Microsoft的STL实现(严格遵循标准的字母)的调试/安全SCL版本中遇到断言失败(取消引用无效迭代器)。现在,我使用列表正是因为我想在列表之间移动一个元素,同时保持指向它的迭代器的有效性。该标准对原始S

c++ - std::list::clear 是否使 std::list::end 迭代器无效?

检查这段代码:#include"stdafx.h"#includeint_tmain(intargc,_TCHAR*argv[]){std::listmylist;mylist.push_back(1);std::list::iteratori=mylist.end();if(i==mylist.end())printf("endisend\n");mylist.clear();if(i==mylist.end())printf("nevergetherebecauseMicrosoftseemsto""thinktheiteratorisnolongersafe.\n");retur

c++ - C++ 迭代器的生命周期和有效性是多少?

我计划用C++实现一个事物列表,其中的元素可能会被乱序删除。我不希望我需要任何类型的随机访问(我只需要定期扫描列表),而且项目的顺序也不重要。所以我想到了std::listwiththis->position=insert(lst.end(),thing)应该可以解决问题。我希望Thing类记住每个实例的位置,以便以后可以轻松地执行lst.erase(this->position)在常数时间内。但是,我对C++STL容器还是有点陌生​​,我不知道将迭代器保存这么长时间是否安全。特别是考虑到在插入的Thing消失之前和之后还会有其他元素被删除。 最佳答案

c++ - STL迭代器相等性是如何建立的?

我想知道,STL迭代器的相等性(==)是如何建立的?它是简单的指针比较(因此基于地址)还是更花哨的东西?如果我有来自两个不同列表对象的两个迭代器并比较它们,结果是否总是错误的?如果我将一个有效值与超出范围的值进行比较怎么办?这总是错误的吗? 最佳答案 如果需要,迭代器类可以定义重载的==运算符。所以结果取决于operator==的实现。您真的不应该比较来自不同容器的迭代器。我认为如果您这样做,一些调试STL实现会发出警告信号,这将帮助您在代码中发现这种错误使用情况。 关于c++-STL迭